package com.fjwt.gz.service.impl;

import com.fjwt.gz.components.mq.model.ExportExcelMQ;
import com.fjwt.gz.core.constants.Constants;
import com.fjwt.gz.core.entity.SysUser;
import com.fjwt.gz.core.utils.SpringBeansUtil;
import com.fjwt.gz.db.entity.SysExportTaskEntity;
import com.fjwt.gz.service.activity.AbstractExportReport;
import com.fjwt.gz.service.mapper.SysExportTaskMapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.stereotype.Service;

import java.util.Date;

/**
 * <p>
 * 异步执行导出报表任务表 服务实现类
 * </p>
 *
 * @author wangjie
 * @since 2025-07-18
 */
@Slf4j
@Service
public class SysExportTaskService extends ServiceImpl<SysExportTaskMapper, SysExportTaskEntity> {


    /**
     * 添加导出报表任务记录
     *
     * @return
     */
    public Long addExportTask(SysUser sysUser, String fileName, String requestCode, String resourceType, String requestParam) {
        SysExportTaskEntity sysExportTaskEntity = new SysExportTaskEntity();
        sysExportTaskEntity.setSerialNo("DONO" + System.currentTimeMillis());
        sysExportTaskEntity.setUserName(sysUser.getRealname());
        sysExportTaskEntity.setResourceType(resourceType);
        sysExportTaskEntity.setFileName(fileName);
        sysExportTaskEntity.setFileType(Constants.EXPORT_TASK_ENUM.FILE_TYPE.EXCEL);
        sysExportTaskEntity.setRequestCode(requestCode);
        sysExportTaskEntity.setRequestParam(requestParam);
        sysExportTaskEntity.setStatus(Constants.EXPORT_TASK_ENUM.STATUS.PENDING);
        sysExportTaskEntity.setSysType(sysUser.getSysType());
        sysExportTaskEntity.setBelongInfoId(sysUser.getBelongInfoId());
        sysExportTaskEntity.setCreatedUid(sysUser.getSysUserId());
        baseMapper.insert(sysExportTaskEntity);
        return sysExportTaskEntity.getExportTaskId();
    }

    public void receive(Long exportTaskId) {
        SysExportTaskEntity sysExportTaskEntity = this.getById(exportTaskId);
        log.info("开始处理导出报表任务：{}", sysExportTaskEntity);
        if (ObjectUtils.isNotEmpty(sysExportTaskEntity)) {
            sysExportTaskEntity.setStartTime(new Date());
            sysExportTaskEntity.setStatus(Constants.EXPORT_TASK_ENUM.STATUS.FAILED);

            AbstractExportReport exportExcelService = SpringBeansUtil.getBean(sysExportTaskEntity.getRequestCode() + "ExportReport", AbstractExportReport.class);
            if (ObjectUtils.isEmpty(exportExcelService)) {
                sysExportTaskEntity.setErrorMsg("该类活动暂无报表导出");
            }else {
                try {
                    String ossUrl = exportExcelService.exportActivityExcel(sysExportTaskEntity);
                    sysExportTaskEntity.setDownloadUrl(ossUrl);
                    sysExportTaskEntity.setStatus(Constants.EXPORT_TASK_ENUM.STATUS.SUCCESS);
                }catch (Exception e) {
                    sysExportTaskEntity.setErrorMsg(e.getMessage());
                }
            }
            sysExportTaskEntity.setCompletedTime(new Date());
            this.updateById(sysExportTaskEntity);
        }
    }

}
